package com.zrrd.learn.chapter08面向对象.pattern.proxy;

import java.lang.reflect.Proxy;

/**
 * 法院
 *
 * @author wrn
 * @version 1.0
 * @date 2023/8/4 14:21
 */

public class Count1 {

    public Count1() {
        System.out.println("1111");
    }


    //动态代理：

    //反射机制：

    public static void main(String[] args) {
        Defendant d1 = new Defendant();
        d1.setName("吴xx");
        Sayinterface s1 = new LawyerProxy(d1);
        s1.say();

//        spring aop 底层实现

        //动态代理  o 是Sayinterface接口的父类
//        Sayinterface 的实现类的实例 向上转型成了 Object  向下转型

        Sayinterface aa = (Sayinterface) Proxy.newProxyInstance(
                Sayinterface.class.getClassLoader(),
                new Class[]{Sayinterface.class},
                (proxy, method, args1) -> {
                    System.out.println('a');
                    return proxy;
                }
        );

        Sayinterface bb = (Sayinterface) Proxy.newProxyInstance(
                //类加载器
                Sayinterface.class.getClassLoader(),
                //哪个类生成代码
                new Class[]{Sayinterface.class},
                //动态生成相应的方法
                (a, b, c) -> {
                    System.out.println("你好我是你的律师 ");
                    System.out.println("我帮你说话");
                    return a;
                }
        );
        bb.say();
    }
}
